ObjectMapper进阶

ObjectMapper解析的过程与深度优先遍历相似

1.调用Mapper.map进行JSON解析

let result : EBNetworkResult<T> = Mapper< EBNetworkResult<T> >().map(jsonString)

2.调用原声JSON解析库,解析为AnyObject

NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions.AllowFragments)

3.将AnyObject转化为[String : AnyObject]

let JSONDict = JSON as? [String : AnyObject]

4.调用泛型的初始化方法,执行mapping(map: Map)

Mapper<N: Mappable>

if var object = N(map) {
            object.mapping(map)
            return object
        }

5.调用实现的mapping(map: Map)

mutating public func mapping(map: Map) {
        bstatus <-  map["bstatus"]
        data    <-  map["data"]
    }

6.执行操作符函数(左边如果遵守Mappable协议,走下面函数,继续走7)

public func <- <T: Mappable>(inout left: T, right: Map) {
    switch right.mappingType {
    case .FromJSON:
        FromJSON.object(&left, map: right)
    case .ToJSON:
        ToJSON.object(left, map: right)
    }
}

(左边如果不遵守Mappable协议,走下面函数,走8)

public func <- <T>(inout left: T, right: Map) {
    switch right.mappingType {
    case .FromJSON where right.isKeyPresent:
        FromJSON.basicType(&left, object: right.value())
    case .ToJSON:
        ToJSON.basicType(left, map: right)
    default: ()
    }
}

7.传递Value值,当前的key值为“bstatus”(遵守Mappable协议)

class func object<N: Mappable>(inout field: N, map: Map) {
        if map.toObject {
            Mapper(context: map.context).map(map.currentValue, toObject: field)
        } else if let value: N = Mapper(context: map.context).map(map.currentValue) {
            field = value
        }
    }

8.传递Value值,当前的key值为“desc”(不遵守Mappable协议)

class func basicType<FieldType>(inout field: FieldType, object: FieldType?) {
        if let value = object {
            field = value
        }
    }

9.重复4-7(8)的过程,逐层解析,调用mapping(map: Map)

public mutating func mapping(map: Map) {
        code <- map["code"]
        desc <- map["desc"]
    }

results matching ""

    No results matching ""